/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package vccibernos;

/**
 *
 * @author JAVA
 */
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

public class ObtenerTeclado {

    public static String dameCadena(String mensaje) {
        String cadena = null;
        try {
            System.out.println(mensaje);
            BufferedReader teclado;
            teclado = new BufferedReader(new InputStreamReader(System.in));
            cadena = teclado.readLine();
            if(cadena.length()>50){
                System.out.println("No se permiten cadenas de mas de 50 caracteres");
                cadena=dameCadena("Introduzca de nuevo la cadena");
            }
        } catch (IOException ex) {
            System.out.println("Introduzca una cadena");
        } finally {
            return cadena;
        }
    }

    public static int compruebaEntero(String mensaje) {
        int numero = -1;
        try {
            numero = (Integer.parseInt(dameCadena(mensaje)));
        } catch (NumberFormatException nfe) {
            System.out.println("No ha introducido correctamente un numero entero");
        } finally {
            return numero;
        }
    }

    public static int dameEntero(String mensaje) {
        int numero = compruebaEntero(mensaje);
        while (numero == -1) {
            numero = dameEntero("Introduzca un numero entero");
        }
        return numero;
    }

    public static double dameDouble(String mensaje) {

        int num;
        num = (int) Double.parseDouble(dameCadena(mensaje));

        return num;
    }

    public static float compruebaFloat(String mensaje) {
        float numero = -1;
        try {
            numero = (Float.parseFloat(dameCadena(mensaje)));
        } catch (NumberFormatException nfe) {
            System.out.println("No ha introducido correctamente un numero decimal");
        } finally {
            return numero;
        }
    }

    public static float dameFloat(String mensaje) {

        float numero = compruebaFloat(mensaje);
        while (numero == -1) {
            numero = dameEntero("Introduzca un numero decimal");
        }
        return numero;
    }

    public static int obtenerAnio(Date fecha) {

        if (null == fecha) {

            return 0;

        } else {
            SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy");
            return Integer.parseInt(dateFormat.format(fecha));

        }

    }

    public static int obtenerMes(Date fecha) throws ParseException {

        if (null == fecha) {

            return 0;

        } else {
            SimpleDateFormat dateFormat = new SimpleDateFormat("mm");
            return Integer.parseInt(dateFormat.format(fecha));
        }

    }

    public static int obtenerDia(Date fecha) {

        if (null == fecha) {

            return 0;

        } else {
            SimpleDateFormat dateFormat = new SimpleDateFormat("DD");
            return Integer.parseInt(dateFormat.format(fecha));

        }

    }

    public static Date compruebaFecha(String mensaje) {
        Date k = null;
        try {
            DateFormat fecha = new SimpleDateFormat("dd-mm-yyyy");
            k = fecha.parse(dameCadena(mensaje));
            if(obtenerMes(k)>12 || obtenerDia(k)>31 || obtenerAnio(k)<(Calendar.getInstance().get(Calendar.YEAR))
              || obtenerAnio(k)>(Calendar.getInstance().get(Calendar.YEAR)+1)){
                throw new ParseException("Error en la fecha", 0);
            }            
        } catch (ParseException pe) {
            k=null;
            System.out.println("No ha introducido correctamente la fecha");
        } catch (Exception ex){
            k=null;
            System.out.println("No ha introducido correctamente la fecha");
        } finally {
            return k;
        }
    }

    public static Date dameFecha(String mensaje) {
        Date k = compruebaFecha(mensaje);
        while (k == null) {
            k = dameFecha("Introduzca la fecha en formato dd-mm-yyyy");
        }
        return k;
    }
    
    public static int compruebaAno(String mensaje) {
        int numero = -1;
        try {
            numero = (Integer.parseInt(dameCadena(mensaje)));
            if(numero<1927 || numero>Calendar.getInstance().get(Calendar.YEAR)){
                throw new NumberFormatException();
            }
        } catch (NumberFormatException nfe) {
            numero=-1;
            System.out.println("No ha introducido correctamente un numero entero");
        } finally {
            return numero;
        }
    }

    public static int dameAno(String mensaje) {
        int numero = compruebaAno(mensaje);
        while (numero == -1) {
            numero = dameAno("Introduzca un numero entero");
        }
        return numero;
    }
}
